package Leetcode;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class 堆栈互转_L225 {

}

/**
 * 栈实现队列的跟 队列实现栈的还不一样
 */
class 栈实现队列{
    private Stack<Integer> a = new Stack<>();//输入栈
    private Stack<Integer> b = new Stack<>();//输出栈
    public void push(int x){
        a.push(x);
    }
    public int pop() {
        // 如果b栈为空，则将a栈全部弹出并压入b栈中，然后b.pop()
        if(b.isEmpty()){
            while(!a.isEmpty()){
                b.push(a.pop());
            }
        }
        return b.pop();
    }
    public int peek() {
        if(b.isEmpty()){
            while(!a.isEmpty()){
                b.push(a.pop());
            }
        }
        return b.peek();
    }
    public boolean empty() {
        return a.isEmpty() && b.isEmpty();
    }
}

/**
 * 先进先出的，来实现先进后出的
 */
class 队列支持栈{
    private Queue<Integer> a = new LinkedList<>();//输入队列
    private Queue<Integer> b = new LinkedList<>();//输出队列
    public void push(int x) {
        a.offer(x);//先压入，然后，再把B的都压进去，这样就可以a的先出来
        // 将b队列中元素全部转给a队列
        while(!b.isEmpty())
            a.offer(b.poll());
        // 交换a和b,使得a队列没有在push()的时候始终为空队列
        Queue temp = a;
        a = b;
        b = temp;
    }
    public void pop(){
        b.poll();
    }
}
